#include "Principal.h"
#include "Moto2.c"


//programa principal
int main (int argc, char *argv[])
{

	int i,j;
	int rc;
  int t;

  int prob;
	//la primer columna es la x y la segunda la y
	int posicionInicial[NUM_MOTOS][2];
	int movimientoInicial[NUM_MOTOS];

	_bPausa = 1;
	_bJuegoActivo = 1;
		
	//configuracion inicial
	
	init_mapa();

	//setup inicial de las motos
	for( t=0; t<NUM_MOTOS; t++ ){
		//defino la posicion inicial de cada una
		//posicionInicial[t][0] = 5;//x
		//posicionInicial[t][1] = 5;//y
		//actualizar_matriz(5,5,t);
		
		//establezco los turnos
		//TODO: esto se tiene que hacer con una estructura dinamica
		//porque el tamaño del array de turnos podría variar
		//turno[t] = t;
		
		//TODO: hacer la carga de los movimientos iniciales
//		movimientoInicial[t] = DERECHA;
	}
	
	posicionInicial[0][0] = 3;//x
	posicionInicial[0][1] = 3;//y
	//actualizar_matriz(3,3,0);
	
	posicionInicial[1][0] = 7;//x
	posicionInicial[1][1] = 3;//y
	//actualizar_matriz(7,3,1);
	
	movimientoInicial[0] = DERECHA;
	movimientoInicial[1] = ABAJO;
	movimientoInicial[2] = ARRIBA;

	for(t=0; t<NUM_MOTOS; t++){
       
  	motoArray[t].id = t;
    motoArray[t].estado = 1;
    motoArray[t].posX = posicionInicial[t][0];
    motoArray[t].posY = posicionInicial[t][1];
    motoArray[t].ultimo_mov = movimientoInicial[t];
  	rc = pthread_create(&threads[t], NULL, JuegaMoto, (void *)&motoArray[t]);
  	if (rc){
  		printf("ERROR; return code from pthread_create() is %d\n", rc);
		}
	}

	initscr();
  savetty();
  erase ();   
	while (_bJuegoActivo){
    switch(_estadoDelJuego){
             
          case 0:
               if(_bPausa == 1){
                 _bPausa = 0;
               }
			
               pintar_mapa();
               refresh();

               break;
          case 1:
               _bPausa = 1;
               break;
          case 2:
               break;     
          case 3:
               _bJuegoActivo = 0;
               break;             
		} 
		        
 
  }

	resetty();
  endwin();
  pthread_exit(NULL);
}



//una funcioncita que saque de por ahi para no usar el move
//Uso:
//gotoxy(10,10);
//printf("Hola");
void gotoxy(int x, int y)
{
    printf("%c[%d;%df",0x1B,y,x);
}



void pintar_mapa(){

      int i;        
      int j;
      move(OFFSET,OFFSET);
      for(i=0; i < ANCHO_MAPA;i++){
      	for(j=0; j < ALTO_MAPA;j++){
					
         	switch(mapa[i][j]){
						case 1:
							addch('1');
						break;
						case 2:
							addch('2');
						break;
						case 3:
							addch('3');
						break;
			
						case 0:
						default:
							addch('0');
					}
					move(OFFSET+j,OFFSET+i);
        }
      }
              
}

/*
//crea las motos
int init_moto(pthread_t *thread,int id){

	int rc, t;       
	rc = pthread_create(&threads[t], NULL, JuegaMoto, (void *)&motoArray[t]);
	
	return rc;	
}*/


void init_mapa(){
  
  int i,j;
  for(i=0;i<ANCHO_MAPA;i++){
		for(j=0;j<ALTO_MAPA;j++){
    	mapa[i][j]=0;
   	}
  } 
}


int checkea(int mov,int x,int y){
     //TODO
     //return true;
}



void actualizar_matriz(int x,int y,int motoid){
	mapa[x][y] = motoid + 1;
}




void *JuegaMoto(T_Moto *moto)
{

	int motoid;
	int u;
	int turno_actual;
	u = 1;
	//lo del turno tendria que ir quiza en un array o en una estructura dinamica
	//porque aca nada mas lo hago con un contador
	//esta variable es la clave para que se pueda ver como se mueves todos al "mismo tiempo"
	turno_actual = 0; 
	while(moto->estado != 0){
        if(_bPausa == 1)
        {
           //no hago nadaaaa :D pe pe pepepepe pepe !
        }
        else
        {
					if(turno_actual == NUM_MOTOS){
						turno_actual = 0;
					}

					if(turno_actual == moto->id){	
           
          	pthread_mutex_lock( &mutex1 ); 					  mover_moto(moto->id); 
            pthread_mutex_unlock( &mutex1 );
       	  }
       	  
       	  
       	  sleep(SPEEDGAME);
       	  turno_actual++;
        }
        
    }	

	//Logueo la muerte
	pthread_exit(NULL);
}

